package com.feituan.core.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.feituan.core.persistence.mapper.QuestionnaireUserMapper;
import com.feituan.core.persistence.service.ICouponService;
import com.feituan.core.persistence.service.IUserCouponService;
import com.feituan.core.pojo.entity.*;
import com.feituan.core.pojo.request.QuestionnaireUserPageReq;
import com.feituan.core.pojo.response.page.PageData;
import com.feituan.core.service.IQuestionnaireUserService;
import com.feituan.core.service.ITypeCouponsService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.util.Date;

@Service
public class QuestionnaireUserServiceImpl extends ServiceImpl<QuestionnaireUserMapper, QuestionnaireUser> implements IQuestionnaireUserService {

    @Autowired
    private QuestionnaireUserMapper questionnaireUserMapper;

    @Autowired
    private ITypeCouponsService typeCouponsService;

    @Autowired
    private IUserCouponService userCouponService;

    @Autowired
    private ICouponService couponService;

    /**
     * 添加问卷用户
     * @param questionnaireUser questionnaireUser
     */
    @Override
    public boolean save(QuestionnaireUser questionnaireUser) {
        if (questionnaireUser.getId() != null) {
            return update(questionnaireUser);
        }
        questionnaireUser.setCreateTime(new Date());
        QuestionnaireUser info = selectByUserId(questionnaireUser.getUserId());
        if (info == null) {
            TypeCoupons typeCoupons = typeCouponsService.selectByType("new_questionnaire");
            if (typeCoupons != null) {
                for (Coupons coupon : typeCoupons.getCoupons()) {
                    Coupon couponInfo = couponService.selectById(coupon.getCouponId());
                    if (couponInfo != null) {
                        UserCoupon userCoupon = new UserCoupon();
                        userCoupon.setCreateTime(new Date());
                        userCoupon.setUserId(questionnaireUser.getUserId());
                        userCoupon.setCouponStatus(0);
                        userCoupon.setCouponId(coupon.getCouponId());
                        userCouponService.save(userCoupon);
                    }
                }
            }
        }
        return this.questionnaireUserMapper.insert(questionnaireUser) > 0;
    }

    /**
     * 根据问卷id查询问卷用户
     * @param userId userId
     */
    @Override
    public QuestionnaireUser selectByUserId(Long userId) {
        return this.questionnaireUserMapper.selectByUserId(userId);
    }

    /**
     * 更新问卷用户
     * @param questionnaireUser questionnaireUser
     */
    @Override
    public boolean update(QuestionnaireUser questionnaireUser) {
        return this.questionnaireUserMapper.updateById(questionnaireUser) > 0;
    }


    /**
     * 分页查询
     * @param request request
     */
    @Override
    public PageData<QuestionnaireUser> queryPage(QuestionnaireUserPageReq request) {
        Page<QuestionnaireUser> page = this.lambdaQuery()
                .eq(!ObjectUtils.isEmpty(request.getUserId()), QuestionnaireUser::getUserId, request.getUserId())
                .page(new Page<>(request.getPage(), request.getLimit()));
        return PageData.build(page.getCurrent(), page.getTotal(), page.getRecords());
    }

    /**
     * 删除
     * @param id id
     */
    @Override
    public boolean delete(Long id) {
        return this.questionnaireUserMapper.deleteById(id) > 0;
    }

}
